Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


meshchatx/src/backend/lxmf_sieve.py 9f04aef66ac475c8cd9781f372c202eb4a1374eb (9f04aef6) Text, 6.33 KB

T8b949e# SPDX-License-Identifier: 0BSD

T8b949e"""LXMF sieve filters: match peer/message text (substring or regex) and apply actions."""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations

Tff7b72import T7ee787json
Tff7b72import T7ee787re
Tff7b72import T7ee787uuid
Tff7b72from T7ee787typing Tff7b72import Te6edf3Any

Te6edf3MAX_RULES Tff7b72= T79c0ff64
Te6edf3MAX_TERMS_PER_RULE Tff7b72= T79c0ff32
Te6edf3MAX_TERM_LEN Tff7b72= T79c0ff512

Te6edf3SIEVE_SCOPES Tff7b72= Tffa657frozensetTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffeveryoneTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcontactsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnon_contactsTa5d6ff"Tb4b4b4}Tb4b4b4)
Te6edf3SIEVE_ACTIONS Tff7b72= Tffa657frozensetTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffhideTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffignoreTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fffolderTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbanishTa5d6ff"Tb4b4b4}Tb4b4b4)
Te6edf3MATCH_MODES Tff7b72= Tffa657frozensetTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsubstringTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffregexTa5d6ff"Tb4b4b4}Tb4b4b4)

Te6edf3_REGEX_FLAGS Tff7b72= Te6edf3reTff7b72.Td2a8ffIGNORECASE Tff7b72| Te6edf3reTff7b72.Td2a8ffDOTALL


Tff7b72def Td2a8ff_new_rule_idTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffhexTb4b4b4[Tb4b4b4:T79c0ff16Tb4b4b4]


Tff7b72def Td2a8ff_validate_regex_termsTb4b4b4(Te6edf3termsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3outTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3raw Tff7b72in Te6edf3termsTb4b4b4:
Te6edf3p Tff7b72= Tffa657strTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4[Tb4b4b4:Te6edf3MAX_TERM_LENTb4b4b4]
Tff7b72if Tff7b72not Te6edf3pTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Te6edf3pTb4b4b4, Te6edf3_REGEX_FLAGSTb4b4b4)
Tff7b72except Te6edf3reTff7b72.Td2a8fferrorTb4b4b4:
Tff7b72return Tff7b72None
Te6edf3outTff7b72.Td2a8ffappendTb4b4b4(Te6edf3pTb4b4b4)
Tff7b72return Te6edf3out Tff7b72if Te6edf3out Tff7b72else Tff7b72None


Tff7b72def Td2a8ff_normalize_actionTb4b4b4(Te6edf3rawTb4b4b4: Tffa657str Tff7b72| Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3raw Tff7b72== Ta5d6ff"Ta5d6ffblockTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffhideTa5d6ff"
Tff7b72if Te6edf3raw Tff7b72in Te6edf3SIEVE_ACTIONSTb4b4b4:
Tff7b72return Te6edf3raw
Tff7b72return Tff7b72None


Tff7b72def Td2a8ffnormalize_lxmf_sieve_filtersTb4b4b4(Te6edf3filtersTb4b4b4: Tffa657listTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4]Tb4b4b4:
T8b949e"""Validate and normalize a list of sieve rule dicts from user input."""
Te6edf3outTb4b4b4: Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3filtersTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3out
Tff7b72for Te6edf3item Tff7b72in Te6edf3filtersTb4b4b4[Tb4b4b4:Te6edf3MAX_RULESTb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3itemTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3action Tff7b72= Te6edf3_normalize_actionTb4b4b4(Te6edf3itemTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffactionTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3action Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72continue

Te6edf3match_mode Tff7b72= Te6edf3itemTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmatch_modeTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffsubstringTa5d6ff"
Tff7b72if Te6edf3match_mode Tff7b72not Tff7b72in Te6edf3MATCH_MODESTb4b4b4:
Te6edf3match_mode Tff7b72= Ta5d6ff"Ta5d6ffsubstringTa5d6ff"

Te6edf3match_peer_fields Tff7b72= Te6edf3itemTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmatch_peer_fieldsTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3match_peer_fields Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3match_peer_fields Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3match_peer_fields Tff7b72= Tffa657boolTb4b4b4(Te6edf3match_peer_fieldsTb4b4b4)
Te6edf3match_message Tff7b72= Tffa657boolTb4b4b4(Te6edf3itemTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmatch_messageTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3match_peer_fields Tff7b72and Tff7b72not Te6edf3match_messageTb4b4b4:
Tff7b72continue

Te6edf3terms_in Tff7b72= Te6edf3itemTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftermsTa5d6ff"Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3terms_inTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Te6edf3terms Tff7b72= Tb4b4b4[Te6edf3tTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3t Tff7b72in Te6edf3reTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff[Ta5d6ff\Ta5d6ffn,]+Ta5d6ff"Tb4b4b4, Te6edf3terms_inTb4b4b4) Tff7b72if Te6edf3tTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4]
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3terms_inTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Te6edf3terms Tff7b72= Tb4b4b4[Tffa657strTb4b4b4(Te6edf3tTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3t Tff7b72in Te6edf3terms_in Tff7b72if Tffa657strTb4b4b4(Te6edf3tTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3terms Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3terms Tff7b72= Tb4b4b4[Te6edf3tTb4b4b4[Tb4b4b4:Te6edf3MAX_TERM_LENTb4b4b4] Tff7b72for Te6edf3t Tff7b72in Te6edf3termsTb4b4b4[Tb4b4b4:Te6edf3MAX_TERMS_PER_RULETb4b4b4]Tb4b4b4]

Tff7b72if Te6edf3match_mode Tff7b72== Ta5d6ff"Ta5d6ffregexTa5d6ff"Tb4b4b4:
Te6edf3validated Tff7b72= Te6edf3_validate_regex_termsTb4b4b4(Te6edf3termsTb4b4b4)
Tff7b72if Te6edf3validated Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72continue
Te6edf3terms Tff7b72= Te6edf3validated
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Te6edf3termsTb4b4b4:
Tff7b72continue

Te6edf3folder_idTb4b4b4: Tffa657int Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tff7b72if Te6edf3action Tff7b72== Ta5d6ff"Ta5d6fffolderTa5d6ff"Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3folder_id Tff7b72= Tffa657intTb4b4b4(Te6edf3itemTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffolder_idTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72continue

Te6edf3rid Tff7b72= Tffa657strTb4b4b4(Te6edf3itemTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Te6edf3_new_rule_idTb4b4b4(Tb4b4b4)
Te6edf3scope Tff7b72= Te6edf3itemTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffscopeTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3itemTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffapplies_toTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3scope Tff7b72not Tff7b72in Te6edf3SIEVE_SCOPESTb4b4b4:
Te6edf3scope Tff7b72= Ta5d6ff"Ta5d6ffeveryoneTa5d6ff"
Te6edf3outTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Te6edf3ridTb4b4b4,
Ta5d6ff"Ta5d6ffenabledTa5d6ff"Tb4b4b4: Tffa657boolTb4b4b4(Te6edf3itemTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffenabledTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffscopeTa5d6ff"Tb4b4b4: Te6edf3scopeTb4b4b4,
Ta5d6ff"Ta5d6ffmatch_peer_fieldsTa5d6ff"Tb4b4b4: Te6edf3match_peer_fieldsTb4b4b4,
Ta5d6ff"Ta5d6ffmatch_messageTa5d6ff"Tb4b4b4: Te6edf3match_messageTb4b4b4,
Ta5d6ff"Ta5d6ffmatch_modeTa5d6ff"Tb4b4b4: Te6edf3match_modeTb4b4b4,
Ta5d6ff"Ta5d6fftermsTa5d6ff"Tb4b4b4: Te6edf3termsTb4b4b4,
Ta5d6ff"Ta5d6ffactionTa5d6ff"Tb4b4b4: Te6edf3actionTb4b4b4,
Ta5d6ff"Ta5d6fffolder_idTa5d6ff"Tb4b4b4: Te6edf3folder_idTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3out


Tff7b72def Td2a8ffparse_lxmf_sieve_filters_jsonTb4b4b4(Te6edf3rawTb4b4b4: Tffa657str Tff7b72| Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3raw Tff7b72or Tff7b72not Tffa657strTb4b4b4(Te6edf3rawTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72except Tb4b4b4(Te6edf3jsonTff7b72.Td2a8ffJSONDecodeErrorTb4b4b4, Tf85149TypeErrorTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3dataTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72return Te6edf3normalize_lxmf_sieve_filtersTb4b4b4(Te6edf3dataTb4b4b4)


Tff7b72def Td2a8ff_rule_scope_matchesTb4b4b4(Te6edf3ruleTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3is_contactTb4b4b4: Tffa657boolTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3scope Tff7b72= Te6edf3ruleTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffscopeTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffeveryoneTa5d6ff"
Tff7b72if Te6edf3scope Tff7b72not Tff7b72in Te6edf3SIEVE_SCOPESTb4b4b4:
Te6edf3scope Tff7b72= Ta5d6ff"Ta5d6ffeveryoneTa5d6ff"
Tff7b72if Te6edf3scope Tff7b72== Ta5d6ff"Ta5d6ffeveryoneTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72if Te6edf3scope Tff7b72== Ta5d6ff"Ta5d6ffcontactsTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3is_contact
Tff7b72if Te6edf3scope Tff7b72== Ta5d6ff"Ta5d6ffnon_contactsTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72not Te6edf3is_contact
Tff7b72return Tff7b72True


Tff7b72def Td2a8ff_any_term_matches_substringTb4b4b4(Te6edf3termsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4, Te6edf3haystack_lowerTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3hs Tff7b72= Te6edf3haystack_lower Tff7b72or Ta5d6ff"Ta5d6ff"
Tff7b72for Te6edf3term Tff7b72in Te6edf3termsTb4b4b4:
Te6edf3t Tff7b72= Tffa657strTb4b4b4(Te6edf3termTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3t Tff7b72and Te6edf3t Tff7b72in Te6edf3hsTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Tff7b72False


Tff7b72def Td2a8ff_any_term_matches_regexTb4b4b4(Te6edf3termsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4, Te6edf3haystack_rawTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3text Tff7b72= Te6edf3haystack_raw Tff7b72or Ta5d6ff"Ta5d6ff"
Tff7b72for Te6edf3pattern Tff7b72in Te6edf3termsTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3reTff7b72.Td2a8ffsearchTb4b4b4(Te6edf3patternTb4b4b4, Te6edf3textTb4b4b4, Te6edf3_REGEX_FLAGSTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72except Te6edf3reTff7b72.Td2a8fferrorTb4b4b4:
Tff7b72continue
Tff7b72return Tff7b72False


Tff7b72def Td2a8ff_terms_match_rule_on_textTb4b4b4(
Te6edf3ruleTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4,
Te6edf3text_lowerTb4b4b4: Tffa657strTb4b4b4,
Te6edf3text_rawTb4b4b4: Tffa657strTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3terms Tff7b72= Te6edf3ruleTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftermsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Te6edf3mode Tff7b72= Te6edf3ruleTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmatch_modeTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffsubstringTa5d6ff"
Tff7b72if Te6edf3mode Tff7b72== Ta5d6ff"Ta5d6ffregexTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3_any_term_matches_regexTb4b4b4(Te6edf3termsTb4b4b4, Te6edf3text_rawTb4b4b4)
Tff7b72return Te6edf3_any_term_matches_substringTb4b4b4(Te6edf3termsTb4b4b4, Te6edf3text_lowerTb4b4b4)


Tff7b72def Td2a8fffirst_matching_lxmf_sieve_ruleTb4b4b4(
Te6edf3rulesTb4b4b4: Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4]Tb4b4b4,
Te6edf3peer_haystackTb4b4b4: Tffa657str Tff7b72| Tff7b72NoneTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3is_contactTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4,
Te6edf3message_haystackTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
T8b949e"""Return the first enabled rule whose scope and match flags are satisfied."""
Te6edf3peer_raw Tff7b72= Te6edf3peer_haystack Tff7b72or Ta5d6ff"Ta5d6ff"
Te6edf3peer_lower Tff7b72= Te6edf3peer_rawTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Te6edf3msg_raw Tff7b72= Te6edf3message_haystack
Te6edf3msg_lower Tff7b72= Tb4b4b4(Te6edf3message_haystack Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)

Tff7b72for Te6edf3rule Tff7b72in Te6edf3rulesTb4b4b4:
Tff7b72if Tff7b72not Te6edf3ruleTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffenabledTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72if Tff7b72not Te6edf3_rule_scope_matchesTb4b4b4(Te6edf3ruleTb4b4b4, Te6edf3is_contactTb4b4b4)Tb4b4b4:
Tff7b72continue

Te6edf3peer_fields Tff7b72= Te6edf3ruleTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmatch_peer_fieldsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Te6edf3match_msg Tff7b72= Te6edf3ruleTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmatch_messageTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)

Te6edf3peer_ok Tff7b72= Tff7b72True
Tff7b72if Te6edf3peer_fieldsTb4b4b4:
Te6edf3peer_ok Tff7b72= Te6edf3_terms_match_rule_on_textTb4b4b4(Te6edf3ruleTb4b4b4, Te6edf3peer_lowerTb4b4b4, Te6edf3peer_rawTb4b4b4)

Te6edf3msg_ok Tff7b72= Tff7b72True
Tff7b72if Te6edf3match_msgTb4b4b4:
Tff7b72if Te6edf3msg_raw Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72continue
Te6edf3msg_ok Tff7b72= Te6edf3_terms_match_rule_on_textTb4b4b4(Te6edf3ruleTb4b4b4, Te6edf3msg_lowerTb4b4b4, Te6edf3msg_rawTb4b4b4)

Tff7b72if Te6edf3peer_ok Tff7b72and Te6edf3msg_okTb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffactionTa5d6ff"Tb4b4b4: Te6edf3ruleTb4b4b4[Ta5d6ff"Ta5d6ffactionTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fffolder_idTa5d6ff"Tb4b4b4: Te6edf3ruleTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffolder_idTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffrule_idTa5d6ff"Tb4b4b4: Te6edf3ruleTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffscopeTa5d6ff"Tb4b4b4: Te6edf3ruleTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffscopeTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffeveryoneTa5d6ff"Tb4b4b4,
Tb4b4b4}
Tff7b72return Tff7b72None


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────